package com.sofa.api.client.permission;

import com.sofa.api.client.user.fallback.UserClientFallback;
import com.sofa.api.dto.permission.UserRoleDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

@FeignClient(value = "permission-service", fallbackFactory = UserClientFallback.class)
public interface PermissionClient {
    /**
     * 绑定默认角色
     * @param userId 用户ID
     */
    @PostMapping("/permission/bind/{userId}")
    void bindDefaultRole(@PathVariable("userId") Long userId);


    /**
     * 获取用户角色代码
     * @param userId 用户ID
     * @return 角色代码
     */
    @GetMapping("/permission/role/code/{userId}")
    String getUserRoleCode(@PathVariable("userId") Long userId);

    /**
     * 根据角色获取用户id列表
     * @param roleCode 角色
     * @return 用户id列表
     */
    @GetMapping("/permission/role/users/{roleCode}")
    List<Long> getUserIdsByRolesCode(@PathVariable("roleCode") String roleCode);

    /**
     * 超管调用: 升级为管理员
     * @param userId 用户id
     */
    @PostMapping("/permission/upgrade/{userId}")
    void upgradeToAdmin(@PathVariable("userId") Long userId);

    /**
     * 超管调用: 降级为普通用户
     * @param userId 用户id
     */
    @PostMapping("/permission/downgrade/{userId}")
    void downgradeToUser(@PathVariable("userId") Long userId);

    /**
     * 根据用户列表返回用户对应角色
     * @param userIds 用户id列表
     * @return
     */
    @PostMapping("/permission/role/code/batch")
    List<UserRoleDTO> getUserRoleByUserIds(@RequestBody List<Long> userIds);
}
